﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Biciq.Datos;
using System.Collections.Generic;
using System.Linq;

namespace Biciq.Silverlight.UI
{
    public class EstacionesVistaModelo:VistaModeloBase
    {
         #region campos
        private RelayCommand _comandoAbrirNuevo;
       
        private EditarEstacionVistaModelo _editarEstacionVistaModelo;
        private EditarEstacionVista _editarEstacionVista;
        private Estacion _EstacionActual;
        private RelayCommand _comandoEditar;
        private Estacion _EstacionItem;
      
        private Estacion _EstacionLogueado;
     
       
        private List<Estacion> _listaEstacion;
        private String _busqueda;
        private RelayCommand _comandoBuscar;
        private bool _mostrarErrores;
        #endregion

        #region constructores
        public EstacionesVistaModelo()
        {
            MostrarErrores = Visibility.Collapsed;
            InicializarMensajesError();
            this.EsInicio = true;
            Buscar();
        }


        #endregion

        #region metodos Publicos

        #endregion

        #region propiedades
        /// <summary>
        /// Comando que se dispara al dar click en el botón buscar
        /// </summary>
        public RelayCommand ComandoBuscar
        {
            get
            {
                if (_comandoBuscar == null)
                {
                    _comandoBuscar = new RelayCommand
                    (

                          p => Buscar()
                    );
                }
                return _comandoBuscar;
            }
        }

        /// <summary>
        /// Criterio de Búsqueda
        /// </summary>
        public string Busqueda
        {
            get { return _busqueda; }
            set
            {
                _busqueda = value;
                RaisePropertyChanged("Busqueda");
            }
        }

        /// <summary>
        /// Propiedad que muestra la lista de Estaciones
        /// </summary>
        public List<Estacion> ListaEstacion
        {
            get { return _listaEstacion; }
            set
            {
                _listaEstacion = value;
                RaisePropertyChanged("ListaEstacion");
            }
        }

        /// <summary>
        /// Estacion Logueado en el Sistema
        /// </summary>
        public Estacion EstacionLogueado
        {
            get { return _EstacionLogueado; }
            set
            {
                _EstacionLogueado = value;
                RaisePropertyChanged("EstacionLogueado");
            }
        }
        
       

      
        /// <summary>
        /// Item selecionado en la grilla
        /// </summary>
        public Estacion EstacionItem
        {
            get { return _EstacionItem; }
            set { _EstacionItem = value; }
        }

        /// <summary>
        /// Comando para edición
        /// </summary>
        public RelayCommand ComandoEditar
        {
            get
            {
                return _comandoEditar ?? (_comandoEditar = new RelayCommand(EditarEstacion));
            }

        }

        /// <summary>
        /// Comando para crear un nuevo item
        /// </summary>
        public RelayCommand ComandoAbrirNuevo
        {
            get
            {
                if (_comandoAbrirNuevo == null)
                {
                    _comandoAbrirNuevo = new RelayCommand
                    (
                        p => AbrirNuevo()
                    );
                }
                return _comandoAbrirNuevo;
            }
        }
        #endregion

        #region metodos Privados
        /// <summary>
        /// Realiza la Búsqueda de Estacions
        /// </summary>
        private void Buscar()
        {

            BiciqContexto.Estacions.Clear();

            var datos = BiciqContexto.Estacions;
            if (Busqueda != null && Busqueda != "")
            {
                if (!_mostrarErrores)
                {
                    InicializarMensajesError();
                }

                BiciqContexto.Load(BiciqContexto.GetBusquedaEstacionNombreQuery(Busqueda)).Completed += delegate
                {
                    ListaEstacion = datos.ToList();
                    Busqueda = "";
                    validaBusqueda(ListaEstacion);                   
                };
            }
            else
            {
                BiciqContexto.Load(BiciqContexto.GetEstacionsQuery()).Completed += delegate
                {
                    ListaEstacion = datos.ToList();
                    Busqueda = "";
                    validaBusqueda(ListaEstacion);                   
                };
            }

           
        }
      
        

        /// <summary>
        /// Método en el cual se edita el item seleccionado
        /// </summary>

        private void EditarEstacion(object parametro)
        {
            this.EstacionItem = (Estacion)parametro;
            _editarEstacionVistaModelo = new EditarEstacionVistaModelo();
            _editarEstacionVista = new EditarEstacionVista();
            _editarEstacionVistaModelo.IsDirty = true;
            InstanciaEditarEstacion(this.EstacionItem);
        }

        /// <summary>
        /// Método en el cual se crea un nuevo item
        /// </summary>
        private void AbrirNuevo()
        {
            _editarEstacionVistaModelo = new EditarEstacionVistaModelo();
            _editarEstacionVista = new EditarEstacionVista();
            InstanciaEditarEstacion(_EstacionActual);
        }

        /// <summary>
        /// Para editar los Estaciones
        /// </summary>
        /// <param name="Estacion"></param>
        private void InstanciaEditarEstacion(Estacion Estacion)
        {
            _editarEstacionVista = new EditarEstacionVista();
            _editarEstacionVistaModelo = new EditarEstacionVistaModelo();
            if (Estacion != null)
            {
                _editarEstacionVistaModelo = new EditarEstacionVistaModelo(Estacion);
            }
            else
            {
                _editarEstacionVistaModelo = new EditarEstacionVistaModelo();
            }


            _editarEstacionVistaModelo.EventoCerrarEditor += delegate
            {
                _editarEstacionVista.Close();
                BiciqContexto.Estacions.Clear();
                _comandoBuscar = null;
                ComandoBuscar.Execute(true);

            };

            _editarEstacionVista.DataContext = _editarEstacionVistaModelo;
            _editarEstacionVista.HasCloseButton = false;
            _editarEstacionVista.Show();
        }

      
        public override void Eliminar(object parametro)
        {
            String titulo = "Eliminar Estacion";
            Action accion = EliminarEstacion;
            this.EstacionItem = (Estacion)parametro;
            LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar
                ("Está seguro de eliminar el Estacion seleccionado?", titulo, LogicStudio.Framework.UI.Utilidades.TipoVentana.Confirmar, accion);

        }

        private void EliminarEstacion()
        {
            InicializarMensajesError();
           
                Procesando = true;
               
                     BiciqContexto.Tarjetas.Clear();
                     BiciqContexto.Load(BiciqContexto.GetTarjetaPorIdQuery(this.EstacionItem.IdTarjeta.Value)).Completed += delegate
                     {
                         Tarjeta tarjeta = BiciqContexto.Tarjetas.FirstOrDefault();
                         if (tarjeta != null)
                         {
                             tarjeta.Estado = "ELIMINADO";
                         }

                         this.EstacionItem.Estado = RecursosLenguaje.Recursos.Inactivo.ToUpper();
                         BiciqContexto.SubmitChanges().Completed += delegate
                         {
                             InicializarMensajesError();
                             AgregarMensajeInformacion(string.Format("El Estacion se ha eliminado con éxito"));
                             _mostrarErrores = true;
                             this.EsInicio = true;
                             Procesando = false;
                             Buscar();

                         };


                     };
            


        }

        #endregion
    }
}
